/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package examen3;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.beans.VetoableChangeListener;
import java.beans.VetoableChangeSupport;
import java.io.BufferedReader;
import java.io.*;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.StringTokenizer;

/**
 *
 * @author johnsolano
 */
public class Equipo {

    private String nombre;

    private String Grupo;

    private int raking;

    private int numCopas;

    private int p1;

    private int p2;

    private int p3;

    private int p4;

    private int p5;

    public static final String PROP_P5 = "p5";
    private String SnombFichNuev;

    Equipo() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    /**
     * Get the value of p5
     *
     * @return the value of p5
     */
    public int getP5() {
        return p5;
    }

    /**
     * Set the value of p5
     *
     * @param p5 new value of p5
     */
    public void setP5(int p5) {
        int oldP5 = this.p5;
        this.p5 = p5;
        propertyChangeSupport.firePropertyChange(PROP_P5, oldP5, p5);
    }

    /**
     * Get the value of p4
     *
     * @return the value of p4
     */
    public int getP4() {
        return p4;
    }

    /**
     * Set the value of p4
     *
     * @param p4 new value of p4
     */
    public void setP4(int p4) {
        this.p4 = p4;
    }

    /**
     * Get the value of p3
     *
     * @return the value of p3
     */
    public int getP3() {
        return p3;
    }

    /**
     * Set the value of p3
     *
     * @param p3 new value of p3
     */
    public void setP3(int p3) {
        this.p3 = p3;
    }

    public static final String PROP_P2 = "p2";

    /**
     * Get the value of p2
     *
     * @return the value of p2
     */
    public int getP2() {
        return p2;
    }

    /**
     * Set the value of p2
     *
     * @param p2 new value of p2
     */
    public void setP2(int p2) {
        int oldP2 = this.p2;
        this.p2 = p2;
        propertyChangeSupport.firePropertyChange(PROP_P2, oldP2, p2);
    }

    public static final String PROP_P1 = "p1";

    /**
     * Get the value of p1
     *
     * @return the value of p1
     */
    public int getP1() {
        return p1;
    }

    /**
     * Set the value of p1
     *
     * @param p1 new value of p1
     */
    public void setP1(int p1) {
        int oldP1 = this.p1;
        this.p1 = p1;
        propertyChangeSupport.firePropertyChange(PROP_P1, oldP1, p1);
    }

    public static final String PROP_NUMCOPAS = "numCopas";

    /**
     * Get the value of numCopas
     *
     * @return the value of numCopas
     */
    public int getNumCopas() {
        return numCopas;
    }

    /**
     * Set the value of numCopas
     *
     * @param numCopas new value of numCopas
     */
    public void setNumCopas(int numCopas) {
        int oldNumCopas = this.numCopas;
        this.numCopas = numCopas;
        propertyChangeSupport.firePropertyChange(PROP_NUMCOPAS, oldNumCopas, numCopas);
    }

    /**
     * Get the value of raking
     *
     * @return the value of raking
     */
    public int getRaking() {
        return raking;
    }

    /**
     * Set the value of raking
     *
     * @param raking new value of raking
     */
    public void setRaking(int raking) {
        this.raking = raking;
    }

    public static final String PROP_GRUPO = "Grupo";

    /**
     * Get the value of Grupo
     *
     * @return the value of Grupo
     */
    public String getGrupo() {
        return Grupo;
    }

    /**
     * Set the value of Grupo
     *
     * @param Grupo new value of Grupo
     */
    public void setGrupo(String Grupo) {
        String oldGrupo = this.Grupo;
        this.Grupo = Grupo;
        propertyChangeSupport.firePropertyChange(PROP_GRUPO, oldGrupo, Grupo);
    }

    public static final String PROP_NOMBRE = "nombre";

    /**
     * Get the value of nombre
     *
     * @return the value of nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Set the value of nombre
     *
     * @param nombre new value of nombre
     */
    public void setNombre(String nombre) {
        String oldNombre = this.nombre;
        this.nombre = nombre;
        propertyChangeSupport.firePropertyChange(PROP_NOMBRE, oldNombre, nombre);
    }

    private transient final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);

    /**
     * Add PropertyChangeListener.
     *
     * @param listener
     */
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
    }

    /**
     * Remove PropertyChangeListener.
     *
     * @param listener
     */
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }

    private transient final VetoableChangeSupport vetoableChangeSupport = new VetoableChangeSupport(this);

    /**
     * Add VetoableChangeListener.
     *
     * @param listener
     */
    public void addVetoableChangeListener(VetoableChangeListener listener) {
        vetoableChangeSupport.addVetoableChangeListener(listener);
    }

    /**
     * Remove VetoableChangeListener.
     *
     * @param listener
     */
    public void removeVetoableChangeListener(VetoableChangeListener listener) {
        vetoableChangeSupport.removeVetoableChangeListener(listener);
    }

    public Equipo(String nombre, String Grupo, int raking, int numCopas, int p1, int p2, int p3, int p4, int p5) {
        this.nombre = nombre;
        this.Grupo = Grupo;
        this.raking = raking;
        this.numCopas = numCopas;
        this.p1 = p1;
        this.p2 = p2;
        this.p3 = p3;
        this.p4 = p4;
        this.p5 = p5;
    }

    static public List<Equipo> listaEquipos() {
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        List<Equipo> equipos = new ArrayList<Equipo>();
        try {
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
            archivo = new File("equipos.txt");
            fr = new FileReader(archivo);
            br = new BufferedReader(fr);

            // Lectura del fichero
            String linea;
            while ((linea = br.readLine()) != null) {
                try {
                    StringTokenizer token = new StringTokenizer(linea, ",");
                    String nombre = token.nextToken().trim();
                    String grupo = token.nextToken().trim();
                    String rankig = token.nextToken().trim();
                    String numCopa = token.nextToken().trim();
                    String p1 = token.nextToken().trim();
                    String p2 = token.nextToken().trim();
                    String p3 = token.nextToken().trim();
                    String p4 = token.nextToken().trim();
                    String p5 = token.nextToken().trim();
                    equipos.add(new Equipo(nombre, grupo, Integer.parseInt(rankig), Integer.parseInt(numCopa), Integer.parseInt(p1), Integer.parseInt(p2), Integer.parseInt(p3), Integer.parseInt(p4), Integer.parseInt(p5)));
                    //System.out.println(linea);    
                } catch (Exception e) {
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // En el finally cerramos el fichero, para asegurarnos
            // que se cierra tanto si todo va bien como si salta 
            // una excepcion.
            try {
                if (null != fr) {
                    fr.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return equipos;
    }

    public void writeArchivo(List<Equipo> listaEquipos) {

        File archivoEquipos = new File("equipos.txt");

		// actualizamos valores nuevos
        //listaEquipos.set(index, equipo);
        try {
            FileWriter w = new FileWriter(archivoEquipos);
            BufferedWriter bw = new BufferedWriter(w);
            PrintWriter wr = new PrintWriter(bw);
            for (int i = 0; i < listaEquipos.size(); i++) {

                // en caso de ser la ultima linea no agregar salto de linea
                if (i == listaEquipos.size() - 1) {

                    wr.write(listaEquipos.get(i).getNombre() + ","
                            + listaEquipos.get(i).getGrupo() + ","
                            + listaEquipos.get(i).getRaking() + ","
                            + listaEquipos.get(i).getNumCopas() + ","
                            + listaEquipos.get(i).getP1() + ","
                            + listaEquipos.get(i).getP2() + ","
                            + listaEquipos.get(i).getP3() + ","
                            + listaEquipos.get(i).getP4() + ","
                            + listaEquipos.get(i).getP5());

                } else {
                    wr.write(listaEquipos.get(i).getNombre() + ","
                          
                            + listaEquipos.get(i).getGrupo() + ","
                            + listaEquipos.get(i).getRaking() + ","
                            + listaEquipos.get(i).getNumCopas() + ","
                            + listaEquipos.get(i).getP1() + ","
                            + listaEquipos.get(i).getP2() + ","
                            + listaEquipos.get(i).getP3() + ","
                            + listaEquipos.get(i).getP4() + ","
                            + listaEquipos.get(i).getP5() + "\n");
                }
            }
            wr.close();
            bw.close();
            this.listaEquipos();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @Override
    public String toString() {
        return "Equipo=" + nombre + "-->Grupo=" + Grupo + "-->Raking Mundial=" + raking + "-->Numero de Copas=" + numCopas + "-->Partido 1=" + p1 + "-->Partido 2=" + p2 + "-->Partido 3=" + p3 + "-->Partido 4=" + p4 + "-->Partido 5=" + p5 + '\n';
    }
}
